#ifndef VALUE_H
#define VALUE_H

#include <string>

using namespace std;


enum ValueBasicType
{
    VTVoid,
    VTInt,
    VTFloat,
    VTComplex,
    VTImaginary,
    VTNamed,
    VTType,
};

enum ValueTypeSize
{
    VTSTiny,            // used for char
    VTSSmall,           // short, float
    VTSNormal,
    VTSLarge            // long, double
};

class Value
{
    enum ValueBasicType ValType;

public:
    Value() : ValType(VTVoid) {};
    Value(enum ValueBasicType t) : ValType(t) {};
};

class ValueInt : public Value
{
    int Val;

public:
    ValueInt(int v) : Value(VTInt), Val(v) {};
};

class ValueType : public Value
{
    enum ValueBasicType Val;
    enum ValueTypeSize Size;
    bool Signed;
    string Name;

public:
    ValueType(enum ValueBasicType v, enum ValueTypeSize s = VTSNormal, bool sg = false) : Value(VTType), Val(v), Size(s), Signed(sg) {};
    ValueType(string n) : Value(VTType), Val(VTNamed), Size(VTSNormal), Signed(false), Name(n) {};
};

#endif /* VALUE_H */
